package fr.lna.util;

import org.springframework.context.ApplicationContext;

/**
 * Classe pour afficher des descriptions texte des objets
 * 
 * @author Rouviere_x
 * @version 1
 */
public abstract class MessageTools extends Tools {

	/**
	 * Renvoie le message d'erreur de la classe.
	 * Le message est de la forme suivante :
	 * [e.ClassName] e.Message 
	 * Si l'erreur contient une cause le message suivant est ajoute :
	 * --cause([e.cause.ClassName] e.cause.Message)
	 * 
	 * @param e une erreur
	 * @return message d'erreur formate.
	 */
	public static String getMessage(Throwable e)
	{
		String res;
		if (e != null)
		{
			res = "[" + e.getClass() + "] " + e.getMessage();
			Throwable cause = null;
			if ((cause = e.getCause()) != null)
			{
				res += "--cause(" + "[" + cause.getClass() + "] " + cause.getMessage() + ")";
			}
		}
		else
		{
			res = "Aucun message";
		}
		return res;
	}
	
	/**
	 * Description d'un Application contexte
	 * 
	 * @param ctx 
	 * @return description du contexte
	 */
	public static String getMessage(ApplicationContext ctx)
	{
		String res;
		if (ctx != null)
		{
			res = "[" +ctx.getId()+"] " + ctx.getBeanDefinitionCount()+" beans";
		}
		else
		{
			res = "Context NULL";
		}
		return res;
	}
	
	/**
	 * Methode pour générer un code à partir d'un nom de type enumeratif
	 * @param prefix 
	 * @param string
	 * @return
	 */
	public static String genCode(Enum<?> e, String prefix, Character sep) {
		String res = e.toString();
		res = res.toLowerCase();
		res = res.replace('_', sep);
		if (isSet(prefix)) {
			res = prefix +"."+res;
		}
		return res;
	}
	

	/**
	 * Methode pour générer un code à partir d'un nom de type enumeratif
	 * @param prefix 
	 * @param string
	 * @return
	 */
	public static String genCode(Enum<?> e, String prefix) {
		return genCode(e,prefix,'.');
	}

	/**
	 * Renvoi le premier caractère de la chaine si elle est positionné
	 * @param mes
	 * @return
	 */
	public static char getFirstChar(String message) {
		if (isSet(message)) {
			return message.charAt(0);
		}
		return 0;
	}
}
